<?php
namespace app\admin\controller;
use app\common\controller\Adminbase;
use \think\Loader;
use \think\Config;

// +----------------------------------------------------------------------
// | XpCms
// +----------------------------------------------------------------------
// | Copyright (c) 2021-2099
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Mercurio（Xp） <725668993@qq.com>
// +----------------------------------------------------------------------

/*
** 文章分类 控制器
*/

class Category extends Adminbase {
	private static $_category = null; // 数据表对象
	private static $_model = null;
	private static $_article = null;
	
	// 优先加载
	public function _initialize() {
		parent::_initialize();
		
		// 实例化数据表模型
		self::$_category = Loader::model('Category');
		self::$_model = Loader::model('Model');
		self::$_article = Loader::model('Article');
		
	}
	
	// 分类列表
	public function index() {
		
		$lists = self::$_category -> categoryLists();
		$this -> assign('categorylists', tree_cate($lists));
		return view('index');
	}
	
	// 新增分类页面
	public function add() {
		
		$modellists = self::$_model -> modelLists();
		
// 		echo Config::get('template');die();  // 前台模板路径先暂时写死=-=
		// 模板文件
		//获取所有模版
        $template = getTemplate();
        $this->assign('tpls', $template);
        // 文章分类
		$cate = db('category')
            ->field('id,name,pid,mcode')
            ->order('sort ASC,id ASC')
            ->select();
        $cate = tree_cate($cate);
        $this->view->assign('cate',$cate);
		$this -> assign('modellists', $modellists);
		return view('add');
	}
	
	// 保存新增分类
	public function addsave() {
		
		$inputs = input('post.');
		
		// 使用模型验证器进行验证
		$result = $this -> validate($inputs, 'Category.add');
		if(true !== $result){
			// 验证失败 输出错误信息
			$this -> error($result);
		}
		
		// 验证新增数据 name 是否重复
		$this -> checkNameAdd($inputs);
		
		$result = checkEntitle($inputs['name'],$inputs['typedir']);	
		if($result=="no"){
		    $this -> error('栏目目录已存在');
		}else{
			$inputs['typedir'] = $result;
		}
		
		// 保存数据
		if(self::$_category -> data($inputs) -> save()){
			$this -> success('添加成功','index');
		}
		
		$this -> error('添加失败');
	}
	
	// 编辑分类页面
	public function edit() {
		
		$id = input('param.id/d');
		if(!$id){
			$this -> error('参数错误');
		}
		
		
        // 文章分类
		$cate = db('category')
            ->field('id,name,pid,mcode')
            ->order('sort ASC,id ASC')
            ->select();
        $pid = db('category')->where('id', $id)->value('pid');
        $this->view->assign('pid',$pid);
        $cate = tree_cate($cate);
        $this->view->assign('cate',$cate);
		
		$modellists = self::$_model -> modelLists();
		$this -> assign('modellists', $modellists);
		// 模板文件
        $template = getTemplate();
        $this->assign('tpls', $template);
		$lists = self::$_category -> getCategoryDetail($id);
		if(!$lists){
			$this -> error('参数错误');
		}
		
		$this -> assign('lists', $lists);
		return view('add');
	}
	
	// 保存编辑分类
	public function editsave() {
		
		$inputs = input('post.');
		
		$id = (int) $inputs['id'];
		if(!$id){
			$this -> error('参数错误');
		}
		
		// 使用模型验证器进行验证
		$result = $this -> validate($inputs, 'Category.edit');
		if(true !== $result){
			// 验证失败 输出错误信息
			$this -> error($result);
		}
		
		$find = self::$_category -> where(array('id' => $id)) -> value('id');
		if(!$find){
			$this -> error('参数错误');
		}
		$result = checkEntitle($inputs['name'],$inputs['typedir'],$id);	
		if($result=="no"){
		    $this -> error('栏目目录已存在');
		}else{
			$inputs['typedir'] = $result;
		}
		
		// 验证更新数据 name 是否重复
		$this -> checkNameUpdate($inputs);
		unset($inputs['id']);
		$pid = $inputs['pid'];
		if($pid > 0){
			// 获取上级菜单的 path
			$prentPath = self::$_category -> where(array('id' => $pid)) -> value('path');
			
			$inputs['path'] = $prentPath . '-' . $id;
		}else{
			$inputs['path']  = '0-' . $id;
		}
		// 保存数据
		if(self::$_category -> save($inputs, array('id' => $id))){
			$this -> success('修改成功!','index');
		}
		
		$this -> error('修改失败或没有数据可更新');
	}
	
	// 编辑栏目状态
	public function editstatus() {
		
		$id = input('post.id/d');
		if(!$id){
			$this -> error('参数错误');
		}
		
		$result = self::$_category -> editStatus($id);
		if($result){
		    return ['error'=>0,'msg'=>'操作成功!'];
			$this -> success('操作成功');
		}
	    return ['error'=>1,'msg'=>'操作失败!'];
	}
	
	// 删除分类
	public function deletes() {
		
		$id = input('post.id/d');
		if(!$id){
			$this -> error('参数错误');
		}
		
		$result = self::$_category -> deletes($id);
		if($result['status'] == 1){
		    return ['error'=>0,'msg'=>'删除成功!'];
		}
		return ['error'=>1,'msg'=>$result['msg']];
	}
	
	// 验证新增数据 name 是否重复添加
	private function checkNameAdd($data) {
		$checkData = array('name' => $data['name']);
		$find = self::$_category -> where($checkData) -> find();
		if($find){
			$this -> error('同样的记录已经存在');
		}
		return true;
	}
	
	// 验证更新数据 name 是否重复添加
	private function checkNameUpdate($data) {
		
		$checkData = array('name' => $data['name']);
		$find = self::$_category -> where($checkData) -> value('id');
		
		if($find && $find != $data['id']){
			$this -> error('同样的记录已经存在');
		}
		return true;
	}
	
	//栏目排序
    public function sort(){
        $id = input('post.id/d');
        $sort = input('post.sort/d');
		if(!$id){
			return ['error'=>1,'msg'=>'ID不存在'];
		}
		if(self::$_category -> save(array('sort'=> $sort), array('id' => $id))){
			return ['error'=>0,'msg'=>'修改成功!'];
		}
    }
    
    //批量删除栏目
    public function selectDel(){
        $id = input('post.id');
        if(!$id){
			return ['error'=>1,'msg'=>'ID不存在'];
		}
		$ids = explode(',', $id);
		for ($i = 0; $i < count($ids); $i++) {
	        $catname = self::$_category -> where(array('id' => $ids[$i])) -> value('name');
		    if($this -> hasChild($ids[$i])){
		        return ['error'=>1,'msg'=>'栏目<'.$catname.'>有子分类，不能删除'];
    		}
    		// 检测是否有文章
    		if(self::$_article -> where(array('cid' => $id)) -> find()){
    			return ['error'=>1,'msg'=>'栏目<'.$catname.'>下已有文章，不能删除'];
    		}
    		self::$_category -> deletes($id);
		}
		return ['error'=>0,'msg'=>'删除成功!'];
    }
    
    // 检测是否有子分类
	public function hasChild($id) {
		
		$has = self::$_category -> where(array('pid' => $id)) -> value('id');
		if($has){
			return true;
		}
		return false;
	}

	
}
